import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class ResultSetStudy {

    private static Connection s_pConnect;
    private static Statement s_pStatement;
    private static java.sql.ResultSet s_setResult;

    public static void main(String[] args) {
        try {
            Class.forName(Const.JDBC_DRIVER);

            s_pConnect = DriverManager.getConnection(Const.MYSQL_URL, Const.USER_NAME, Const.USER_PASSWORD);

            /*ResultSetStudy 支持的功能在构造 Statement 时就已经指定了
             * 以普通 Statement 为例子构造不同类型的 Statement , 以获支持不同功能的 ResultSet
             * createState(int RSType, int RSConcurrency)
             * 第一个参数为 ResultSet 的类型：
             *   1.ResultSet.TYPE_FORWARD_ONLY  游标只能向后走
             *   2.ResultSet.TYPE_SCROLL_INSENSITIVE  游标可以前后走动，但是当数据库内容变化时，结果集不变
             *   3.ResultSet.TYPE_SCROLL_SENSITIVE  游标可以前后走动，会随着数据库的变化而变化
             * 第二个参数为 ResultSet 的读写类型
             *   1.ResultSet.CONCUR_READ_ONLY  只读，是默认值
             *   2.ResultSet.CONCUR_UPDATABLE  读写
             * */
            s_pStatement = s_pConnect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            String strSql = "SELECT * FROM simpleTable";
            s_setResult = s_pStatement.executeQuery(strSql);

            System.out.println("Read From head");
            while (s_setResult.next()) {
                FirstExample.readContentFromSimpleTableResultSet(s_setResult);
            }

            s_setResult.first();
            // 游标回到第一个，此时需要直接打印一组数据
            System.out.println("\r\n return to first");
            FirstExample.readContentFromSimpleTableResultSet(s_setResult);
            while (s_setResult.next()) {
                FirstExample.readContentFromSimpleTableResultSet(s_setResult);
            }


        } catch (Exception ex) {
            ex.printStackTrace();

        } finally {
            try {
                if (s_setResult != null) {
                    s_setResult.close();
                }

                if (s_pStatement != null) {
                    s_pStatement.close();
                }

                if (s_pConnect != null) {
                    s_pConnect.close();
                }
            } catch (Exception e) {

            }
        }
    }
}
